/**
 * TDS PEC 4
 * Grupo 3H2M
 *
 * El paquete <code>edu.uoc.tds.pec4.mantenimiento</code> agrupa todas las
 * interfaces, clases y elementos de la GUI para la gestión del subsistema 
 * de Mantenimiento
 */
package edu.uoc.tds.pec4.mantenimiento;

import edu.uoc.tds.pec4.rmi.GestorMantenimientoInterface;
import edu.uoc.tds.pec4.beans.UsuarioDTO;
import edu.uoc.tds.pec4.common.util.TDSLanguageUtils;
import edu.uoc.tds.pec4.common.util.UtilidadesGUI;
import edu.uoc.tds.pec4.server.bbdd.exceptions.GestorMantenimientoException;
import java.awt.Frame;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import javax.swing.JOptionPane;

/**
 * La clase <code>DialogBuscaUsuario</code> representa la interfaz de
 * usuario para la búsqueda de un usuario.
 * Permitirá la localización de un usuario por su identificador, 
 * su nif o su nombre y apellidos.<br />
 *
 * Interficie de usuario para la búsqueda de usuarios.
 *
 * @author	Luis Rivas Mariño
 * @version	10/12/2011
 * @see		edu.uoc.tds.pec4.common.GestorMantenimientoInterface
 */
public class DialogBuscaUsuario extends javax.swing.JDialog {

    /** clientConnected Indica si el cliente está conectado al servidor */
    private boolean clientConnected = false;
    /** objRemoto Es el objeto empleado como interfaz en la comunicación RMI */
    private GestorMantenimientoInterface objRemotoMantenimiento = null;

    // Identificador del usuario conectado
    private UsuarioDTO usLogeado;

    /** Crea un nuevo formulario DialogBuscaUsuario */
    public DialogBuscaUsuario(java.awt.Frame parent, boolean modal, UsuarioDTO usLogeado) {
        super(parent, TDSLanguageUtils.getMessage("mantenimiento.usuario.busca.titulo"), modal);

        this.usLogeado = usLogeado;

        conectarCliente();

        initComponents();

        //Centramos la ventana en la pantalla
        UtilidadesGUI.centrarVentana(this);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        panelDatos = new javax.swing.JPanel();
        lblNombre = new javax.swing.JLabel();
        nombre = new javax.swing.JTextField();
        lblApellidos = new javax.swing.JLabel();
        apellidos = new javax.swing.JTextField();
        lblNif = new javax.swing.JLabel();
        nif = new javax.swing.JTextField();
        lblIdUsuario = new javax.swing.JLabel();
        idUsuario = new javax.swing.JTextField();
        panelBotones = new javax.swing.JPanel();
        btnBuscar = new javax.swing.JButton();
        btnVolver = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        panelDatos.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Búsqueda de usuario", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11))); // NOI18N

        lblNombre.setText(TDSLanguageUtils.getMessage("mantenimiento.gui.etiqueta.nombre"));

        nombre.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                nombreKeyReleased(evt);
            }
        });

        lblApellidos.setText(TDSLanguageUtils.getMessage("mantenimiento.gui.etiqueta.apellidos"));

        apellidos.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                apellidosKeyReleased(evt);
            }
        });

        lblNif.setText(TDSLanguageUtils.getMessage("mantenimiento.gui.etiqueta.nif"));

        nif.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                nifKeyReleased(evt);
            }
        });

        lblIdUsuario.setText(TDSLanguageUtils.getMessage("mantenimiento.gui.etiqueta.idusuario"));

        idUsuario.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                idUsuarioKeyReleased(evt);
            }
        });

        javax.swing.GroupLayout panelDatosLayout = new javax.swing.GroupLayout(panelDatos);
        panelDatos.setLayout(panelDatosLayout);
        panelDatosLayout.setHorizontalGroup(
            panelDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelDatosLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lblIdUsuario)
                    .addComponent(lblNombre))
                .addGap(14, 14, 14)
                .addGroup(panelDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(nombre, javax.swing.GroupLayout.DEFAULT_SIZE, 128, Short.MAX_VALUE)
                    .addComponent(idUsuario, javax.swing.GroupLayout.DEFAULT_SIZE, 128, Short.MAX_VALUE))
                .addGap(47, 47, 47)
                .addGroup(panelDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(lblApellidos)
                    .addComponent(lblNif))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(nif, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(apellidos, javax.swing.GroupLayout.DEFAULT_SIZE, 176, Short.MAX_VALUE))
                .addContainerGap())
        );
        panelDatosLayout.setVerticalGroup(
            panelDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelDatosLayout.createSequentialGroup()
                .addGroup(panelDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(nif, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(lblNif))
                    .addGroup(panelDatosLayout.createSequentialGroup()
                        .addGap(1, 1, 1)
                        .addGroup(panelDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(lblIdUsuario)
                            .addComponent(idUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(lblNombre)
                        .addComponent(nombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(panelDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(apellidos, javax.swing.GroupLayout.DEFAULT_SIZE, 20, Short.MAX_VALUE)
                        .addComponent(lblApellidos)))
                .addGap(11, 11, 11))
        );

        btnBuscar.setText(TDSLanguageUtils.getMessage("mantenimiento.gui.boton.buscar"));
        btnBuscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBuscarActionPerformed(evt);
            }
        });

        btnVolver.setText(TDSLanguageUtils.getMessage("mantenimiento.gui.boton.volver"));
        btnVolver.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnVolverActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout panelBotonesLayout = new javax.swing.GroupLayout(panelBotones);
        panelBotones.setLayout(panelBotonesLayout);
        panelBotonesLayout.setHorizontalGroup(
            panelBotonesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelBotonesLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(btnBuscar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnVolver)
                .addContainerGap(11, Short.MAX_VALUE))
        );
        panelBotonesLayout.setVerticalGroup(
            panelBotonesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelBotonesLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelBotonesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnVolver)
                    .addComponent(btnBuscar))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(panelDatos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(panelBotones, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(panelDatos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(panelBotones, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Conectar con el servidor RMI
     * Permitela conexion con el servidor RMI
     */
    private void conectarCliente() {
        try {
            objRemotoMantenimiento = (GestorMantenimientoInterface) Naming.lookup("GestorMantenimiento");
            clientConnected = true;
        } catch (NotBoundException eNbe) {
            objRemotoMantenimiento = null;
            JOptionPane.showMessageDialog(null,
                    TDSLanguageUtils.getMessage("cliente.error.notbound") + "\n" + eNbe.getMessage(),
                    TDSLanguageUtils.getMessage("cliente.error"), JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException eRe) {
            objRemotoMantenimiento = null;
            JOptionPane.showMessageDialog(null,
                    TDSLanguageUtils.getMessage("cliente.error.url") + "\n" + eRe.getMessage(),
                    TDSLanguageUtils.getMessage("cliente.error"), JOptionPane.ERROR_MESSAGE);
        } catch (MalformedURLException eMULRe) {
            objRemotoMantenimiento = null;
            JOptionPane.showMessageDialog(null,
                    TDSLanguageUtils.getMessage("cliente.error.conn") + "\n" + eMULRe.getMessage(),
                    TDSLanguageUtils.getMessage("cliente.error"), JOptionPane.ERROR_MESSAGE);
        } catch (Exception eE) {
            objRemotoMantenimiento = null;
            JOptionPane.showMessageDialog(null,
                    TDSLanguageUtils.getMessage("cliente.error.conn") + "\n" + eE.getMessage(),
                    TDSLanguageUtils.getMessage("cliente.error"), JOptionPane.ERROR_MESSAGE);
        }
    }

    /**
     * Establece la acción a realizar cuando se pulsa el botón Volver
     * @param evt El evento que inicia la acción a realizar
     */
    private void btnVolverActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVolverActionPerformed
        dispose();
    }//GEN-LAST:event_btnVolverActionPerformed

    /*
     * Establece y realiza la acción de búsqueda requerida por el usuario 
     */
    private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBuscarActionPerformed
        UsuarioDTO usuario = null;
        try {
            if (!(idUsuario.getText().equals(""))) {
                usuario = objRemotoMantenimiento.consultaUsuarioPorId(idUsuario.getText());
            } else if (!(nif.getText().equals(""))) {
                usuario = objRemotoMantenimiento.consultaUsuarioPorNif(nif.getText());
            } else if (!(nombre.getText().equals("")) && !(apellidos.getText().equals(""))) {
                usuario = objRemotoMantenimiento.consultaUsuarioPorNombre(nombre.getText(), apellidos.getText());
            }

            if (usuario == null) {
                JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("mantenimiento.usuario.err.buscar"));
            } else {
                Frame frame = JOptionPane.getFrameForComponent(this);
                dispose();
                DialogConsultaUsuario dlgConsultaUsuario = new DialogConsultaUsuario(frame, objRemotoMantenimiento, usuario, usLogeado, true);
                dlgConsultaUsuario.setVisible(true);
            }

        } catch (RemoteException eRe) {
            JOptionPane.showMessageDialog(null,
                    eRe.getMessage(), TDSLanguageUtils.getMessage("gmantenimiento.err.usuario.buscar"),
                    JOptionPane.ERROR_MESSAGE);
        } catch (GestorMantenimientoException gmE) {
            JOptionPane.showMessageDialog(null,
                    gmE.getMessage(), TDSLanguageUtils.getMessage("gmantenimiento.err.usuario.buscar"),
                    JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_btnBuscarActionPerformed

    /*
     * Establece las acciones a realizar cuando cambia el contenido del campo apellidos
     */
    private void apellidosKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_apellidosKeyReleased
        if (!(apellidos.getText().equals(""))) {
            idUsuario.setEditable(false);
            idUsuario.setEnabled(false);
            nif.setEditable(false);
            nif.setEnabled(false);
            nombre.setEditable(true);
            nombre.setEnabled(true);
        } else if ((nombre.getText().equals(""))) {
            idUsuario.setEditable(true);
            idUsuario.setEnabled(true);
            nif.setEditable(true);
            nif.setEnabled(true);
        }
    }//GEN-LAST:event_apellidosKeyReleased

    /*
     * Establece las acciones a realizar cuando cambia el contenido del campo nombre
     */
    private void nombreKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_nombreKeyReleased
        if (!(nombre.getText().equals(""))) {
            idUsuario.setEditable(false);
            idUsuario.setEnabled(false);
            nif.setEditable(false);
            nif.setEnabled(false);
            apellidos.setEditable(true);
            apellidos.setEnabled(true);
        } else if ((apellidos.getText().equals(""))) {
            idUsuario.setEditable(true);
            idUsuario.setEnabled(true);
            nif.setEditable(true);
            nif.setEnabled(true);
        }
    }//GEN-LAST:event_nombreKeyReleased

    /*
     * Establece las acciones a realizar cuando cambia el contenido del campo idUsuario
     */
    private void idUsuarioKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_idUsuarioKeyReleased
        if (!(idUsuario.getText().equals(""))) {
            nif.setEditable(false);
            nif.setEnabled(false);
            nombre.setEditable(false);
            nombre.setEnabled(false);
            apellidos.setEditable(false);
            apellidos.setEnabled(false);
        } else {
            nif.setEditable(true);
            nif.setEnabled(true);
            nombre.setEditable(true);
            nombre.setEnabled(true);
            apellidos.setEditable(true);
            apellidos.setEnabled(true);
        }
    }//GEN-LAST:event_idUsuarioKeyReleased
    /*
     * Establece las acciones a realizar cuando cambia el contenido del campo nif
     */

private void nifKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_nifKeyReleased
    if (!(nif.getText().equals(""))) {
        idUsuario.setEditable(false);
        idUsuario.setEnabled(false);
        nombre.setEditable(false);
        nombre.setEnabled(false);
        apellidos.setEditable(false);
        apellidos.setEnabled(false);
    } else {
        idUsuario.setEditable(true);
        idUsuario.setEnabled(true);
        nombre.setEditable(true);
        nombre.setEnabled(true);
        apellidos.setEditable(true);
        apellidos.setEnabled(true);
    }
}//GEN-LAST:event_nifKeyReleased
    /**
     * Habilita los controles del formulario
     */
    private void habilitaControles() {
        idUsuario.setEditable(true);
        idUsuario.setEnabled(true);
        nif.setEditable(true);
        nif.setEnabled(true);
        nombre.setEditable(true);
        nombre.setEnabled(true);
        apellidos.setEditable(true);
        apellidos.setEnabled(true);
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTextField apellidos;
    private javax.swing.JButton btnBuscar;
    private javax.swing.JButton btnVolver;
    private javax.swing.JTextField idUsuario;
    private javax.swing.JLabel lblApellidos;
    private javax.swing.JLabel lblIdUsuario;
    private javax.swing.JLabel lblNif;
    private javax.swing.JLabel lblNombre;
    private javax.swing.JTextField nif;
    private javax.swing.JTextField nombre;
    private javax.swing.JPanel panelBotones;
    private javax.swing.JPanel panelDatos;
    // End of variables declaration//GEN-END:variables
}
